/**
 * 加密工具
 * 提供简单的加密解密功能
 */

/**
 * 简单加密类
 */
export class SimpleCrypto {
  constructor(secretKey = import.meta.env.VITE_CRYPTO_SECRET_KEY || 'judge-platform-2024-default') {
    this.secretKey = secretKey
    this.timeSalt = Date.now().toString(36)
  }

  /**
   * XOR 加密 + 时间盐混淆
   * @param {string} text - 要加密的文本
   * @returns {string} 加密后的文本
   */
  encrypt(text) {
    if (!text) return ''

    try {
      const saltedText = this.timeSalt + '|' + text
      let result = ''
      const combinedKey = this.secretKey + this.timeSalt

      for (let i = 0; i < saltedText.length; i++) {
        const charCode = saltedText.charCodeAt(i) ^ combinedKey.charCodeAt(i % combinedKey.length)
        result += String.fromCharCode(charCode)
      }

      return btoa(encodeURIComponent(result))
    } catch (error) {
      if (import.meta.env.DEV) {
        console.error('加密失败:', error)
      }
      return ''
    }
  }

  /**
   * 解密
   * @param {string} encryptedText - 加密的文本
   * @returns {string} 解密后的文本
   */
  decrypt(encryptedText) {
    if (!encryptedText) return ''

    try {
      const text = decodeURIComponent(atob(encryptedText))
      let result = ''
      const combinedKey = this.secretKey + this.timeSalt

      for (let i = 0; i < text.length; i++) {
        const charCode = text.charCodeAt(i) ^ combinedKey.charCodeAt(i % combinedKey.length)
        result += String.fromCharCode(charCode)
      }

      const pipeIndex = result.indexOf('|')
      if (pipeIndex > 0) {
        return result.substring(pipeIndex + 1)
      }

      return result
    } catch (error) {
      if (import.meta.env.DEV) {
        console.error('解密失败:', error)
      }
      return ''
    }
  }
}
